from django.views import View
from django.http import JsonResponse
from django_redis import get_redis_connection
import re
import random

from user import user_constants as u_const
from meiduo_move_server import project_constants as p_const
from user.utils.sms_utils import SendSmsVerificationCode
from meiduo_move_server.utils import request_utils as req_utils
from meiduo_move_server.utils import data_type_change_utils
from user.utils import user_account_utils
from meiduo_move_server.utils.mysql_utils import MySQLUtils
from user.utils import jwt_utils


class Login(View):
    """
    处理用户登录的视图类
    """

    def get(self, req):
        """
        验证用户当前用户token是否有效，判断当前用户的登录状态，是否需要重新登录
        """
        # token = req.COOKIES.get('token')  # 获取token
        token = req.GET.get('token')  # 获取token
        if token is None:  # 未登录
            return JsonResponse({
                'mark': p_const.MARK_ERROR,
                'message': '用户未登录'
            })
        token_data = jwt_utils.get_payload(token)
        if token_data is None:  # 未登录
            return JsonResponse({
                'mark': p_const.MARK_ERROR,
                'message': '用户未登录'
            })
        return JsonResponse({
            'mark': 1,
            'message': '登录成功'
        })

    def post(self, req):
        """
        post方法用于处理用户的登录请求
        @param - req: 请求对象
        @return: 返回本次请求对应的响应对象
        """
        req_data = req_utils.getPostDataToDict(req.body)
        # 判断是手机号登录还是用户账号登录
        userAccount = req_data['userAccount']  # 用户账号或手机号码
        userPassword = user_account_utils.getUserPassword(req_data['userPassword'])  # 用户账号密码
        # 判断当前用户进行登录使用的是手机号还是用户账号
        if re.search(u_const.USER_TELEPHONE_REGULAR, userAccount) is not None:  # 如果为手机号登录
            sql = """
            SELECT user_password, id
            FROM v_user_account_info_login
            WHERE user_telephone = %s;
            """
            res_data = MySQLUtils.select(sql, (userAccount,))
        else:  # 账号登录
            sql = """
            SELECT user_password, id
            FROM v_user_account_info_login
            WHERE user_account = %s;
            """
            res_data = MySQLUtils.select(sql, (userAccount,))
        # print(res_data)
        if res_data['row_count'] < 1:  # 用户账号不存在
            return JsonResponse({
                'mark': p_const.MARK_ERROR,
                'message': '用户账号不存在'
            })
        password = res_data['data'][0][0]  # 获取数据库中的用户密码，判断当前登录账号密码是否正确
        userId = res_data['data'][0][1] # 获取用户id
        if password != userPassword:
            return JsonResponse({
                'mark': p_const.MARK_ERROR,
                'message': '密码错误'
            })
        # 登录成功
        token = jwt_utils.create_token(userAccount, userPassword, userId)  # 生成当前正在登录用户对应的token
        response = JsonResponse({
            'mark': p_const.MARK_SUCCESS,
            'message': '登录成功',
            'data': {
                'token': token
            }
        })
        # response.set_cookie('token', token)
        return response